package com.hsmpay.mobile.dao.brokerage;

import com.hsmpay.common.dao.BaseDao;
import com.hsmpay.mobile.pojo.brokerage.BrokerageOrder;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 佣金合单dao 接口 brokerageOrderDao
 * 对应的pojo 是 BrokerageOrder
 * @param <Entity>
 * @param <Query>
 */
public interface BrokerageOrderDao<Entity extends Serializable,Query extends Object> extends BaseDao<Entity,Query> {
	
	/**
	 * 根据ID  修改状态
	 * @param id
	 * @param status
	 * @param description
	 * @return
	 * @throws SQLException
	 */
	public int updateBrokerageOrderByStatus(Long id, Integer status, String description)throws SQLException;

	/**
	 * 根据结算IDs  查询 结算订单
	 * @param ids
	 * @return
	 * @throws SQLException
	 */
	public List<BrokerageOrder> getBrokerageOrderListByIds(String ids)throws SQLException;

	/**
	 * 根据机构层级  修改佣金状态
	 * @param paramStatus 修改状态
	 * @param description 修改描述
	 * @param status 条件状态
	 * @param layer 条件层级
	 * @param roleId 条件角色
	 * @param clearStartDate 开始结算时间
	 * @param clearEndDate 结束结算时间
	 * @return
	 * @throws SQLException
	 */
	public int updateBOStatusByLayer(Integer paramStatus, String description, Integer status, String layer, Long roleId, Date clearStartDate, Date clearEndDate, Long orderTypeId)throws SQLException;
	
	/**
	 * 根据机构Id  修改父机构佣金状态
	 * @param paramStatus 修改状态
	 * @param description 修改描述
	 * @param status 条件状态
	 * @param organizationId 条件机构Id
	 * @param roleId 条件角色
	 * @param clearStartDate 开始结算时间
	 * @param clearEndDate 结束结算时间
	 * @return
	 * @throws SQLException
	 */
	public int updateBOStatusByOrganizationId(Integer paramStatus, String description, Integer status, Long organizationId, Long roleId, Date clearStartDate, Date clearEndDate, Long orderTypeId)throws SQLException;

	/**
	 * 批量修改发票状态
	 * @param map
	 * @throws SQLException
	 */
	public void updateInvoiceStatusByIds(Map<String, Object> map) throws SQLException;

	/**
	 * 根据 机构 终端类型  查询 等待结算的订单 
	 * @param organizationId
	 * @param roleId
	 * @param inStatus 属于的状态
	 * @param orderTypeId 订单类型
	 * @param transMoney 交易金额
	 * @return
	 * @throws SQLException
	 */
	public List<BrokerageOrder> getOIdRoleIdLessMoneyList(Long organizationId, Long roleId, String inStatus, Long orderTypeId, Double transMoney)throws SQLException;
	
	/**
	 * 查询该层下面的机构佣金总和（包括自己）
	 * @param layer
	 * @param roleId
	 * @param clearStartDate
	 * @param clearEndDate
	 * @param orderTypeId
	 * @return
	 * @throws SQLException
	 */
	public double getTotalMoneyByLayer(String layer, Long roleId, Date clearStartDate, Date clearEndDate, Long orderTypeId)throws SQLException;
	
	/**
	 * 根据机构层级  修改佣金结算机构
	 * @param broClearOrg 结算机构
	 * @param layer 条件层级
	 * @param roleId 条件角色
	 * @param clearStartDate 开始结算时间
	 * @param clearEndDate 结束结算时间
	 * @return
	 * @throws SQLException
	 */
	public int updateBroClearOrgByLayer(Long broClearOrg, String layer, Long roleId, Date clearStartDate, Date clearEndDate, Long orderTypeId)throws SQLException;
	
}
